package com.example.leetcode.trainingcamp.week5.Sunday;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 给定两个字符串 s1 和 s2，请编写一个程序，确定其中一个字符串的字符重新排列后，能否变成另一个字符串。
 *
 * <p>示例 1：
 *
 * <p>输入: s1 = "abc", s2 = "bca" 输出: true 示例 2：
 *
 * <p>输入: s1 = "abc", s2 = "bad" 输出: false
 *
 * <p>来源：力扣（LeetCode） 链接：https://leetcode-cn.com/problems/check-permutation-lcci
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Offer01_02 {

    public boolean CheckPermutation(String s1, String s2) {
        int l1 = s1.length();
        int l2 = s2.length();
        if (l1 != l2 ) return false;
        Map<Character,Integer> map = new HashMap<>();
        for (int i = 0;i<l1;i++){
            map.put(s1.charAt(i),map.getOrDefault(s1.charAt(i),0)+1);
        }
        for (int i =0;i<l2;i++){
            char c = s2.charAt(i);
            if (!map.containsKey(c)){
                return false;
            }else {
                Integer integer = map.get(c);
                integer--;
                map.remove(c);
                if (integer != 0){
                    map.put(c,integer);
                }
            }
        }
        Set<Character> characters = map.keySet();
        return characters.size() == 0;
    }
}
